////从顺序表中删除其值在给定值s和t之间(包含s和t，要求s<t)的所有元素，若s或t不合理或顺序表为空，则显示出错信息并退出运行。
#include<iostream>
using namespace std;
#define MaxSize 50
#define ElemType int

struct List{
    ElemType data[MaxSize];
    int length;

    int InitList(List &L){
        L.length=0;
        return L.length;
    }

    int Length(List &L){
        return L.length;
    }

    bool ListInsert(List &L,int i,ElemType e){
        if(i<1||i>L.length+1){   //判断i的范围是否有效
            return false;
        }
        if(L.length>=MaxSize){   //当前存储空间已满，不能插入
            return false;
        }
        for (int j = L.length; j >= i; j--){ //将第i个元素及之后的元素后移
            L.data[j]=L.data[j-1];
        }
        L.data[i-1]=e;           //在第i个位置放入e
        L.length++;              //线性表长度加1
        return true;
        
    }
};

bool nosequentialListDelete(List &l,ElemType s,ElemType t){
    if(!(s<t)||l.length==0){//s或t不合理或顺序表为空，退出运行返回false
        return false;
    }
    //使用双指针
    int i=0,k=0;//k记录值等于x元素的个数
    while (i<l.length)
    {
        if(l.data[i]>=s && l.data[i]<=t){
            k++;
        }else{
            l.data[i-k]=l.data[i];
        }
        i++;
    }
    l.length-=k;
    return true;
}


int main(){
    List l;
    l.InitList(l);
    l.ListInsert(l,1,12);
    l.ListInsert(l,2,2);
    l.ListInsert(l,3,2);
    l.ListInsert(l,4,1);
    l.ListInsert(l,5,4);
    l.ListInsert(l,6,3);
    cout<<l.data[0]<<","<<l.data[1]<<","<<l.data[2]<<","<<l.data[3]<<","<<l.data[4]<<","<<l.data[5]<<endl;
    nosequentialListDelete(l,2,4);
    cout<<l.data[0]<<","<<l.data[1]<<","<<l.data[2]<<","<<l.data[3]<<","<<l.data[4]<<","<<l.data[5]<<endl;
    return 0;
}